package tv.acgn.advertisement.servicebase.vo;

import java.time.LocalDateTime;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
 * @author : junG
 * @program : advertisement-ad-service-base-vo
 * @description : 通用 服务器请求对象类
 * @date : 2019-06-01 18:52
 **/

@Data
@Accessors(chain = true)
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CommonRequest<T> {

    /**
     * <h2>全局请求识别码</h2>
     * 用于在分布式系统中追踪请求链路 记录请求日志
     *
     * 此识别码在全部请求中应为唯一
     * 或者至少保证在某一较长时间段唯一
     */
    private String requestId;

    /**
     * 调用协议
     * 支持 HTTP/HTTPS
     *
     * 只允许 {@link tv.acgn.advertisement.servicebase.enumconst.Protocol}中的值
     */
    private Integer protocol;
    /**
     * <h2>调用模块</h2>
     *
     * 分布式系统中标明哪个模块进行此次调用
     */
    private String model;

    /**
     * <h2>用户身份码</h2>
     */
    private String userId;

    /**
     * <h2>请求数据体</h2>
     *
     * 调用成功 设置此数据体
     */
    private T data;

    /**
     * 本次调用开始时间
     */
    private LocalDateTime startTime;

}
